#ifndef __APP_SUNCALC_H_
#define __APP_SUNCALC_H_
#include <stdlib.h>
#include <machine/fastmath.h>
#include <Arduino.h>
#include <AccelStepper.h>
#include <MultiStepper.h>
/********************************************************************************************************************************************
 *@*名称 ： Is_Leap_Year
 *@*功能 ： 判断是否为闰年
 *@*形参 ： YearData年数据
 *@*返回值 ： 0 or 1
 *********************************************************************************************************************************************/
int Is_Leap_Year(int YearData);

/********************************************************************************************************************************************
 *@*名称 ： Days_Calculation
 *@*功能 ： 计算日期是当年的第几天
 *@*形参 ： YearData年数据   MonthData月数据  DayData日数据
 *@*返回值 ： Days天数
 *********************************************************************************************************************************************/
int Days_Calculation(int YearData, int MonthData, int DayData);

/********************************************************************************************************************************************
 *@*名称 ： Equation_Time_Calculation
 *@*功能 ： 计算均时差
 *@*形参 ： YearData年数据   MonthData月数据  DayData日数据
 *@*返回值 ： EquationTime均时差
 *********************************************************************************************************************************************/
double Equation_Time_Calculation(int YearData, int MonthData, int DayData);

/********************************************************************************************************************************************
 *@*名称 ： Declination_Angle_Calculation
 *@*功能 ： 计算太阳赤纬角
 *@*形参 ： YearData年数据   MonthData月数据  DayData日数据
 *@*返回值 ： DeclinationAngle太阳赤纬角
 *********************************************************************************************************************************************/
double Declination_Angle_Calculation(int YearData, int MonthData, int DayData);

/********************************************************************************************************************************************
 *@*名称 ： Hour_Angle_Calculation
 *@*功能 ： 计算太阳时角
 *@*形参 ： YearData年数据   MonthData月数据   DayData日数据   HourData小时数据    LongitudeData经度数据
 *@*返回值 ： HourAngle太阳时角
 *********************************************************************************************************************************************/
double Hour_Angle_Calculation(int YearData, int MonthData, int DayData, double HourData, double LongitudeData);

/********************************************************************************************************************************************
 *@*名称 ： Height_Angle_Calculation
 *@*功能 ： 计算太阳高度角
 *@*形参 ： LongitudeData经度数据   LatitudeData纬度数据   YearData年数据   MonthData月数据   DayData日数据   HourData小时数据
 *@*返回值 ： ElevatingAngle太阳高度角
 *********************************************************************************************************************************************/
double Height_Angle_Calculation(double LongitudeData, double LatitudeData, int YearData, int MonthData, int DayData, double HourData);

/********************************************************************************************************************************************
 *@*名称 ： Azimuth_Angle_Calculation
 *@*功能 ： 计算太阳方位角
 *@*形参 ： LongitudeData经度数据   LatitudeData纬度数据   YearData年数据   MonthData月数据   DayData日数据   HourData小时数据
 *@*返回值 ： 太阳方位角（0点开始360度）
 *********************************************************************************************************************************************/
double Azimuth_Angle_Calculation(double LongitudeData, double LatitudeData, int YearData, int MonthData, int DayData, double HourData);
#define CIRCLE_Puls1 160000 // 电机旋转一圈的脉冲数
#define CIRCLE_Puls2 160000 // 电机旋转一圈的脉冲数

void stepperstop(AccelStepper &stepper);
void RotationAngle(AccelStepper &stepper,float pulse);
void run_stepper(AccelStepper &stepper);
void Rotation_BLE(AccelStepper &stepper, float pulse);
void stepper_init(AccelStepper &stepperone,int MaxSpeed,int Acceleration);
#endif